package com.muyu.danmo.util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.springframework.stereotype.Component;

/**
 * getPinyinInitial
 *
 * @author LeYang
 * on 2024/11/19
 */

@Component
public class GetPinyinInitial {

    /**
     * 返回首字母
     * @param name
     * @return
     */
    public static String getPinyinInitial(String name) {
        // 创建格式化对象
        HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
        // 设置大小写格式
        outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        // 设置声调格式
        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        // 只处理第一个字的拼音首字母
        char firstChar = name.charAt(0); // 获取第一个字符

        if (Character.toString(firstChar).matches("[\\u4E00-\\u9FA5]+")) { // 确保是中文字符
            String[] pinyinArray = new String[0];
            try {
                pinyinArray = PinyinHelper.toHanyuPinyinStringArray(firstChar, outputFormat);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }

            if (pinyinArray != null && pinyinArray.length > 0) {
                // 获取拼音的首字母并转换为大写
                return Character.toUpperCase(pinyinArray[0].charAt(0)) + "";
            }
        }

        // 如果第一个字符不是中文，直接返回空或原字符（根据你的需求）
        return "";
    }

    /**
     * 获取中文全拼
     *
     * @param name 需要转换的中文
     * @return 全拼结果
     **/
    public static String getFullPinyin(String name) {
        // 创建格式化对象
        HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
        //设置大小写格式
        outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        //设置声调格式
        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        // 放置输入结果
        StringBuilder result = new StringBuilder();
        // 字符数组
        char[] charArray = name.toCharArray();
        // 遍历字符
        for (char c : charArray) {
            // 中文会被变成全拼，非中文会被直接拼接在结果字符串中
            if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
                String[] pinyinArray = new String[0];
                try {
                    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                    badHanyuPinyinOutputFormatCombination.printStackTrace();
                }
                if (pinyinArray != null) {
                    result.append(pinyinArray[0]);
                }
            } else {
                result.append(c);
            }
        }
        return result.toString();
    }
}
